package com.cloud.easy.im.handler;

import com.cloud.easy.im.argeement.AgreementType;
import com.cloud.easy.im.handler.strategy.AgreementCLoginHandler;
import com.cloud.easy.im.utils.CharsetHelper;
import io.netty.channel.Channel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 服务端核型处理器
 *
 * @author wangjian
 * @version 0.1.0
 * @create 2020年09月03日11:37 上午
 */
public class ServerCoreHandler extends AbstractServerHandler {

    private static final Logger logger = LoggerFactory.getLogger(ServerCoreHandler.class);

    /**
     * 主要用于初始化协议类型处理器
     */
    public ServerCoreHandler() {
        strategyList.add(new AgreementCLoginHandler(AgreementType.C.FROM_CLIENT_TYPE_OF_LOGIN));
    }

    /**
     * 客户端创建链接
     *
     * @param session
     */
    @Override
    public void sessionCreat(Channel session) {
        logger.debug("客户端：" + CharsetHelper.sessionToString(session) + "已建立会话链接");
    }

    /**
     * 客户端断开链接
     *
     * @param session
     * @throws Exception
     */
    @Override
    public void sessionClosed(Channel session) throws Exception {
        logger.debug("客户端：" + CharsetHelper.sessionToString(session) + "已断开会话链接");
        //TODO 后续移除在线队列
    }

    /**
     * 异常处理
     *
     * @param session
     * @param cause
     * @throws Exception
     */
    @Override
    public void exceptionCaught(Channel session, Throwable cause) throws Exception {
        logger.warn("客户端：" + CharsetHelper.sessionToString(session) + "抛出异常，原因是：" + cause.getMessage() + "，可以提前close掉了哦！", cause);
        session.close();
    }
}
